MySQL常用语句集 您所在的位置:网站首页 create database character set MySQL常用语句集

MySQL常用语句集

#MySQL常用语句集| 来源: 网络整理| 查看: 265

1 建表,插入数据

#选定数据库

use dt1; select * from user_info_utf;

#看当前使用哪个数据库

select database();

# 查看数据库里所有表名

show databases ; show tables ;

#修改字符集

alter database dt1 character set utf8; show create database dt1;

#创建数据库 删除数据库

create database dt2x; drop database dt2x;

#创建表

use dt1 ; create table category( cid int , cname varchar(20) );

#建一张和test1相同结构的表

create table test1( tid int , tdate date ); create table test2 like test1 ;

#查看数据表的结构

desc test2 ;

#查看创建category这张表的SQL语句

show create table category;

#删除表

drop table test1 ;

#判断表是否存在,如果存在就删掉

drop table if exists test2;

#修改表名

rename table category to categpry2 ; rename table categpry2 to category ; desc category;

#向表里添加字段

alter table category add name2 varchar(20); desc category;

# 修改已有字段的数据类型或者长度

alter table category modify name2 int ; desc category; alter table category modify name2 varchar(50) ; desc category;

#修改列名称

alter table category change name2 name1 varchar(20); desc category ;

# 删除列

alter table category drop name1 ; desc category ;

# 在表里插数据

insert into category (cid,cname) values (1111,'lundi') ; select * from category ; insert into category (cid) values (0000) ; select * from category ; insert into category values(2222,'mardi'); select * from category ;

#修改表里的值

#带条件改

update category set cid = 20 where cid = 1111; select * from category ;

# 一次修改多列

update category set cid = 11,cname = 'vendredi' where cid = 0 ; select * from category ;

# 删掉所有数据,表本身还存在 ,也可以加where筛选删除特定数据

delete from category ; select * from category ;

#装填一条数据

insert into category values(111,'jeudi') ;

#一个优化删除速度的操作是先删掉整个表,再建一个一摸一样的表。

truncate table category ; select * from category ;2 查取数据

#准备数据

create table emp( eid int , ename varchar(20), sex char(1), salary double , hire_date date , dept_name varchar(20) );

#添加数据

INSERT INTO emp VALUES(1,'孙 悟 空 ','男 ',7200,'2013-02-04','教 学 部 '); INSERT INTO emp VALUES(2,'猪 八 戒 ','男 ',3600,'2010-12-02','教 学 部 '); INSERT INTO emp VALUES(3,'唐 僧 ','男 ',9000,'2008-08-08','教 学 部 '); INSERT INTO emp VALUES(4,'白 骨 精 ','女 ',5000,'2015-10-07','市 场 部 '); INSERT INTO emp VALUES(5,'蜘 蛛 精 ','女 ',5000,'2011-03-14','市 场 部 '); INSERT INTO emp VALUES(6,'玉 兔 精 ','女 ',200,'2000-03-14','市 场 部 '); INSERT INTO emp VALUES(7,'林 黛 玉 ','女 ',10000,'2019-10-07','财 务 部 '); INSERT INTO emp VALUES(8,'黄 蓉 ','女 ',3500,'2011-09-14','财 务 部 '); INSERT INTO emp VALUES(9,'吴 承 恩 ','男 ',20000,'2000-03-14',NULL); INSERT INTO emp VALUES(10,'孙 悟 饭 ','男 ', 10,'2020-03-14','财 务 部 ');

# 查询所有数据

select * from emp ;

#查单个字段

select eid, ename from emp ;

#给列起别名

select eid as '编号', ename as '姓名', sex as '性别', salary as '薪资', hire_date '入职时间', dept_name '部门名称' from emp ;

# 去重

select distinct dept_name from emp ;

# 字段数字计算

select salary + 1000 from emp ;

# 条件查询

select * from emp where dept_name is null ; select * from emp where dept_name is not null ;

#in 可以匹配多个值

select * from emp where salary in (7200,3600);

#or 也可以实现匹配多值

select * from emp where salary = 7200 or salary = 3600;

#第二个字为'悟'的员工信息

# 因为字间有空格,所以用两个下划线占位

select * from emp where ename like '__悟%';

#排序 按薪水从大到小 默认是升序

select * from emp order by salary desc; select * from emp order by salary;

# 还可以组合排,如果薪资一样,就让入职晚的在上

select * from emp order by salary desc , hire_date desc ;

#聚合函数count ,sum ,max,min,avg

select count(eid),sum(salary),max(hire_date),min(hire_date),avg(salary) from emp ;

# 1和*的效果一样

select count(1) from emp ;

#注意count不统计空值

select count(dept_name) from emp ;

#分组函数group by ,只要是select 里出现过的字段,group by后边够可以放

select sex,avg(salary) from emp group by sex;

#计算部门平均薪资,小于3500的不看,用having来做

#部门是空值的也不要

select dept_name , avg(salary) from emp where dept_name is not null group by dept_name having avg(salary) >=3500;

#注意这里where 和having 的区别在于操作顺序上的区别,

#这导致having后面可以跟聚合函数,而where后面跟不了

#limit 限定返回结果的行数

#limit 有两个参数,前一个是起始位置,后一个是限定行数

select * from emp order by salary desc limit 2,1 ;

#只给一个参数的时候默认是从0开始

select * from emp order by salary desc limit 1 ;

#主键约束保证唯一性

# 法1

create table emp2( eid int primary key , ename varchar(20), sex char(1) ); -- drop table emp2 ;

# 法2

create table emp2( eid int , ename varchar(20), sex char(1), primary key(eid) ); -- drop table emp2 ;

#法3

create table emp2( eid int , ename varchar(20), sex char(1) ); alter table emp2 add primary key(eid); desc emp2 ; insert into emp2 values(1,'宋江','男');

#会报错 因为主键不能为空

insert into emp2 values(null,'宋江','男');

#会报错 因为主键不能重复

insert into emp2 values(1,'土豆','男');

#删除主键

alter table emp2 drop primary key ; desc emp2 ; drop table emp2 ;

#主键自增表

create table emp2( eid int primary key auto_increment , ename varchar(20), sex char(1) ); desc emp2 ; INSERT INTO emp2(ename,sex) VALUES('张 三 ','男 '); INSERT INTO emp2(ename,sex) VALUES('李 四 ','男 '); INSERT INTO emp2 VALUES(NULL,'翠 花 ','女 '); select * from emp2 ;

# 修改自增起始值

create table emp3( eid int primary key auto_increment , ename varchar(20), sex char(1) )auto_increment=100; INSERT INTO emp3(ename,sex) VALUES('张 三 ','男 '); INSERT INTO emp3(ename,sex) VALUES('李 四 ','男 '); select * from emp3 ;

#两种删除对自增的影响是不同的,因为删除的机制不一样。

#delete会继续增加数字,而truncate会从0开始。

# 非空约束

create table emp4( eid int primary key auto_increment, ename varchar(20) not null, sex char(1) );

# 唯一约束

create table emp5( eid int primary key auto_increment, ename varchar(20) unique, sex char(1) );

#一个表只能有一个主键,其他约束不做数量限制

# 指定默认值

create table emp6( eid int primary key auto_increment, ename varchar(20) unique, sex char(1) default '女' ); insert into emp6(eid,ename,sex) values (1,'mercredi',default); select * from emp6 ; insert into emp6(eid,ename) values (2,'mercredix'); select * from emp6 ;

#外键

# 先建一个新库

create database db3_2 character set utf8; use db3_2;

#分类表 主表

create table category( cid varchar(32) primary key , cname varchar(50) );

#商品表 从表

create table products( pid varchar(32) primary key , pname varchar(50), price int , flag varchar(2), category_id varchar(32), foreign key(category_id) references category(cid) ); show tables ;

#分 类 数 据

INSERT INTO category(cid,cname) VALUES('c001','家 电 '); INSERT INTO category(cid,cname) VALUES('c002','鞋 服 '); INSERT INTO category(cid,cname) VALUES('c003','化 妆 品 '); INSERT INTO category(cid,cname) VALUES('c004','汽 车 ');

#商 品 数 据

INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p001','小 米 电 视 机 ',5000,'1','c001'); INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p002','格 力 空 调 ',3000,'1','c001'); INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p003','美 的 冰 箱 ',4500,'1','c001'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p004','篮 球 鞋 ',800,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p005','运 动 裤 ',200,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p006','T 恤 ',300,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p007','冲 锋 衣 ',2000,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p008','神 仙 水 ',800,'1','c003'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p009','大 宝 ',200,'1','c003'); select * from category ; select * from products;

# 多表查询

# 内连接

select * from products,category where category_id = cid ; select * from products p join category c on p.category_id = c.cid ;

# 外连接就是 left join , right join

#union 合并查询结果 消除重复行

#union all 不消除重复行

# 子查询就是嵌套

select * from products where price = (select max(price) from products ) ;3 函数:

use dt1 ;

#系统信息函数 看当前用的哪个数据库,版本,使用者账号

select database(); select version(); select user();

#数学函数

select abs(-10); #绝对值 select floor(5.9); #向下取整 select ceil(5.9); #向上取整 select round(2.3333,2);#保留两位小数 select rand();#在0-1之间随机生成随机生成一个数 select pi();#圆周率 select mod(7,3);#取余数

#字符串函数

select concat('i','love','data') ; #拼接,还可以拼字段 select left('data',2);#从左取2位 select right('data',2);#从右取2位 select mid('data',1,2);#中间从第1个开始取,取2个 select substring('i love data',3,4);#从第3个开始取,取4个 select trim(' da ta '); #去除首尾空格 select replace(' da ta ',' ','$');#把串里所有空格换成$ select reverse('data');#翻转字符串

#日期和时间函数

select curdate(); #返回当前日期 select curtime(); #返回当前时间 select now();#返回当前日期和时间 select month('2023-02-06');#返回月份 select year('2023-02-06');#返回年份

#条件判断

select if(15 then 10 when 5>7 then 5 else 0 end

#窗函数

sum(...) over(partition by ... order by ... rows between...and ...) sum也可以是其他聚合函数,还可以是排序函数rank,dense_rank,row_number,还可以是切片函数ntile(n) 也可以是偏移函数前移lag(x,1,2),后移lead(x,1,2)偏移后面的两个参数是从哪开始移,移动多少 rows between 参数: rows between 2 preceding and current row # 取 当 前 行 和 前 面 两 行 rows between unbounded preceding and current row # 包 括 本 行 和 之 前 所 有 的 行 rows between current row and unbounded following # 包 括 本 行 和 之 后 所 有 的 行 rows between 3 preceding and current row # 包 括 本 行 和 前 面 三 行 rows between 3 preceding and 1 following # 从 前 面 三 行 和 下 面 一 行 , 总 共 五 行

更多技能分享见这篇汇总文章:

Sour Radish:数据分析技能汇总



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有